﻿using AppForm_Managers.Object_Entities;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace AppForm_Managers.Views
{
    public partial class EmployeeTranningFosterForm : Form
    {
        public EmployeeTranningFosterForm()
        {
            InitializeComponent();
        }

        private void EmployeeTranningFosterForm_Load(object sender, EventArgs e)
        {
            AddButton.Enabled = true;
            UpdateButton.Enabled = false;
            DeleteButton.Enabled = false;

            UseComboProvinces_DataLoad();
        }

        private void Controls_Reset()
        {
            UpdateButton.Enabled = false;
            DeleteButton.Enabled = false;
            AddButton.Enabled = true;
            NameSchoolTrainText.Text = "";
            SpecializedText.Text = "";
            StartOfDateText.Text = "";
            EndOfDateText.Text = "";
            FormsOfTrainingText.Text = "";
            CertificatesDiplomasText.Text = "";
            CheckStatus.Checked = false;

        }

        private void ViewEmpTraining_Click(object sender, EventArgs e)
        {
            ManagerEmployeesEntities db = new ManagerEmployeesEntities();

            try
            {
                UpdateButton.Enabled = true;
                DeleteButton.Enabled = true;
                AddButton.Enabled = false;

                ErrorProvider.Dispose();
                int empTrainID = 0;
                List<int> listSelected = ViewEmpTraining.GetSelectedRows().ToList<int>();
                int index = -1;
                foreach (var item in listSelected)
                {
                    if (item > -1)
                    {
                        index = item;
                        break;
                    }
                }
                empTrainID = Int32.Parse(ViewEmpTraining.GetRowCellValue(index, "TraFosID").ToString());
                NameSchoolTrainText.Text = ViewEmpTraining.GetRowCellValue(index, "NameSchoolTrain").ToString();
                SpecializedText.Text = ViewEmpTraining.GetRowCellValue(index, "Specialized").ToString();
                StartOfDateText.Text = ViewEmpTraining.GetRowCellValue(index, "StartOfDate").ToString();
                EndOfDateText.Text = ViewEmpTraining.GetRowCellValue(index, "EndOfDate").ToString();
                FormsOfTrainingText.Text = ViewEmpTraining.GetRowCellValue(index, "FormsOfTraining").ToString();
                CertificatesDiplomasText.Text = ViewEmpTraining.GetRowCellValue(index, "CertificatesDiplomas").ToString();
                CheckStatus.Checked = bool.Parse(ViewEmpTraining.GetRowCellValue(index, "TrainStatus").ToString());
            }
            catch (Exception)
            {
                MessageBox.Show("Hệ thống đang bận, hãy thử lại sau.", "Hệ thống thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            finally
            {
                db.Dispose();
            }
        }

        private void UseComboProvinces_DataLoad()
        {
            try
            {
                UseComboProvinces.DataSource = null;
                using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
                {
                    List<Province> list = new List<Province>();

                    Province temp = new Province()
                    {
                        ProvID = 0,
                        NameOfProvince = "Lựa chọn"
                    };

                    list.Add(temp);
                    list.AddRange(db.Provinces);

                    UseComboProvinces.DataSource = list;
                    UseComboProvinces.DisplayMember = "NameOfProvince";
                    UseComboProvinces.ValueMember = "ProvID";
                    UseComboProvinces.SelectedIndex = 0;
                }
            }
            catch (Exception)
            {
                MessageBox.Show("Hệ thống đang bận, hãy thử lại sau.", "Hệ thống thông báo", MessageBoxButtons.OK, MessageBoxIcon.Stop);
            }
        }

        private void UseComboProvinces_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
                {
                    District temp = new District()
                    {
                        DistID = 0,
                        NameOfDist = "Lựa chọn"
                    };

                    List<District> list = new List<District>();
                    list.Add(temp);

                    if (UseComboProvinces.SelectedIndex == 0)
                    {
                        UseComboDistricts.DataSource = list;
                        UseComboDistricts.ValueMember = "DistID";
                        UseComboDistricts.DisplayMember = "NameOfDist";
                        UseComboDistricts.SelectedIndex = 0;
                    }
                    else
                    {
                        int provinceID = int.Parse(UseComboProvinces.SelectedValue.ToString());
                        Province province = db.Provinces.SingleOrDefault(p => p.ProvID == provinceID);
                        list.AddRange(province.Districts.ToList());

                        UseComboDistricts.DataSource = list;
                        UseComboDistricts.ValueMember = "DistID";
                        UseComboDistricts.DisplayMember = "NameOfDist";
                        UseComboDistricts.SelectedIndex = 0;
                    }
                }
            }
            catch (Exception)
            {
                MessageBox.Show("Hệ thống đang bận, hãy thử lại sau.", "Hệ thống thông báo", MessageBoxButtons.OK, MessageBoxIcon.Stop);
            }
        }

        private void UseComboDistricts_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
                {
                    Commune temp = new Commune()
                    {
                        ComID = 0,
                        NameOfComm = "Lựa chọn"
                    };

                    List<Commune> list = new List<Commune>();
                    list.Add(temp);

                    if (UseComboDistricts.SelectedIndex == 0)
                    {
                        UseComboCommunes.DataSource = list;
                        UseComboCommunes.ValueMember = "ComID";
                        UseComboCommunes.DisplayMember = "NameOfComm";
                        UseComboCommunes.SelectedIndex = 0;
                    }
                    else
                    {
                        int districtID = int.Parse(UseComboDistricts.SelectedValue.ToString());
                        District district = db.Districts.SingleOrDefault(p => p.DistID == districtID);
                        list.AddRange(district.Communes.ToList());

                        UseComboCommunes.DataSource = list;
                        UseComboCommunes.ValueMember = "ComID";
                        UseComboCommunes.DisplayMember = "NameOfComm";
                        UseComboCommunes.SelectedIndex = 0;
                    }
                }
            }
            catch (Exception)
            {
                MessageBox.Show("Hệ thống đang bận, hãy thử lại sau.", "Hệ thống thông báo", MessageBoxButtons.OK, MessageBoxIcon.Stop);
            }
        }

        private void UseComboCommunes_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
                {
                    Organization temp = new Organization()
                    {
                        OrgID = 0,
                        NameOfOrgan = "Lựa chọn"
                    };

                    List<Organization> list = new List<Organization>();
                    list.Add(temp);

                    if (UseComboCommunes.SelectedIndex == 0)
                    {
                        UseComboOgrans.DataSource = list;
                        UseComboOgrans.ValueMember = "OrgID";
                        UseComboOgrans.DisplayMember = "NameOfOrgan";
                        UseComboOgrans.SelectedIndex = 0;
                    }
                    else
                    {
                        int communeID = int.Parse(UseComboCommunes.SelectedValue.ToString());
                        Commune commune = db.Communes.SingleOrDefault(p => p.ComID == communeID);
                        list.AddRange(commune.Organizations.ToList());

                        UseComboOgrans.DataSource = list;
                        UseComboOgrans.ValueMember = "OrgID";
                        UseComboOgrans.DisplayMember = "NameOfOrgan";
                        UseComboOgrans.SelectedIndex = 0;
                    }
                }
            }
            catch (Exception)
            {
                MessageBox.Show("Hệ thống đang bận, hãy thử lại sau.", "Hệ thống thông báo", MessageBoxButtons.OK, MessageBoxIcon.Stop);
            }
        }

        private void UseComboOgrans_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
                {
                    Department temp = new Department()
                    {
                        DepID = 0,
                        NameOfDep = "Lựa chọn"
                    };

                    List<Department> list = new List<Department>();
                    list.Add(temp);

                    if (UseComboOgrans.SelectedIndex == 0)
                    {
                        UseComboDeparts.DataSource = list;
                        UseComboDeparts.ValueMember = "DepID";
                        UseComboDeparts.DisplayMember = "NameOfDep";
                        UseComboDeparts.SelectedIndex = 0;
                    }
                    else
                    {
                        int organID = int.Parse(UseComboOgrans.SelectedValue.ToString());
                        Organization organ = db.Organizations.SingleOrDefault(p => p.OrgID == organID);
                        list.AddRange(organ.Departments.ToList());

                        UseComboDeparts.DataSource = list;
                        UseComboDeparts.ValueMember = "DepID";
                        UseComboDeparts.DisplayMember = "NameOfDep";
                        UseComboDeparts.SelectedIndex = 0;
                    }
                }
            }
            catch (Exception)
            {
                MessageBox.Show("Hệ thống đang bận, hãy thử lại sau.", "Hệ thống thông báo", MessageBoxButtons.OK, MessageBoxIcon.Stop);
            }
        }

        private void UseComboDeparts_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
                {
                    Employee temp = new Employee()
                    {
                        EmpID = 0,
                        FirstName = "Lựa chọn"
                    };

                    List<Employee> list = new List<Employee>();
                    list.Add(temp);

                    if (UseComboDeparts.SelectedIndex == 0)
                    {
                        ComboEmployee.DataSource = list;
                        ComboEmployee.ValueMember = "EmpID";
                        ComboEmployee.DisplayMember = "FirstName";
                        ComboEmployee.SelectedIndex = 0;
                    }
                    else
                    {
                        int departID = int.Parse(UseComboDeparts.SelectedValue.ToString());
                        Department emp = db.Departments.SingleOrDefault(p => p.DepID == departID);
                        list.AddRange(emp.Employees1.ToList());

                        ComboEmployee.DataSource = list;
                        ComboEmployee.ValueMember = "EmpID";
                        ComboEmployee.DisplayMember = "FirstName";
                        ComboEmployee.SelectedIndex = 0;
                    }
                }
            }
            catch (Exception)
            {
                MessageBox.Show("Hệ thống đang bận, hãy thử lại sau.", "Hệ thống thông báo", MessageBoxButtons.OK, MessageBoxIcon.Stop);
            }
        }

        private void ComboEmployee_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                Controls_Reset();
                ErrorProvider.Dispose();
                using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
                {
                    if (ComboEmployee.SelectedIndex == 0)
                    {
                        GridEmpTrainning.DataSource = null;
                        ViewGroupBox.Visible = false;
                    }
                    else
                    {
                        int empID = Int32.Parse(ComboEmployee.SelectedValue.ToString());
                        Employee emp = db.Employees.SingleOrDefault(p => p.EmpID == empID);

                        LableCodeEmp.Visible = true;
                        LableCodeEmp.Text = emp.Code;
                        LableFullName.Visible = true;
                        LableFullName.Text = String.Format("{0} {1}", emp.FirstName, emp.LastName);
                        Genderlabel.Visible = true;

                        if (emp.Gender == true)
                            Genderlabel.Text = "Nam";
                        else
                            Genderlabel.Text = "Nữ";

                        LableEmail.Text = emp.Email;
                        LablePhone.Text = emp.Telephone;
                        string avatarUrl = String.Format(@"{0}Uploads\{1}", Ultis_Code.FindSystemUrl.getDefaultURL(), emp.AvatarUrl);
                        Bitmap bm = new Bitmap(avatarUrl);
                        PictureBoxAvata.Image = bm;
                        PictureBoxAvata.SizeMode = PictureBoxSizeMode.StretchImage;
                        ViewGroupBox.Visible = true;
                        GridEmpTrainning.DataSource = emp.TrainingFosterings.ToList();
                    }
                }
            }
            catch (Exception)
            {
                MessageBox.Show("Hệ thống đang bận, hãy thử lại sau.", "Hệ thống thông báo", MessageBoxButtons.OK, MessageBoxIcon.Stop);
            }
        }

        private void AddButton_Click(object sender, EventArgs e)
        {
            ErrorProvider.Dispose();
            if (ComboEmployee.SelectedIndex == 0)
            {
                ErrorProvider.SetError(ComboEmployee, "Hãy chọn nhân viên vừa thêm mới quá trình bồi dưỡng và đào tạo chuyên môn");
                ComboEmployee.Focus();
                return;
            }
            else
                ErrorProvider.Dispose();

            if (NameSchoolTrainText.Text.Trim().Length == 0)
            {
                ErrorProvider.SetError(NameSchoolTrainText, "Tên trường đào tạo và bồi dưỡng không được để trống");
                NameSchoolTrainText.Focus();
                return;
            }
            else
                ErrorProvider.Dispose();

            if (SpecializedText.Text.Trim().Length == 0)
            {
                ErrorProvider.SetError(SpecializedText, "Chuyên nghành đào tạo không được để trống");
                SpecializedText.Focus();
                return;
            }
            else
                ErrorProvider.Dispose();

            if (StartOfDateText.Text.Trim().Length == 0)
            {
                ErrorProvider.SetError(StartOfDateText, "Ngày bắt đầu đào tạo không được để trống");
                StartOfDateText.Focus();
                return;
            }
            else
                ErrorProvider.Dispose();


            if (EndOfDateText.Text.Trim().Length == 0)
            {
                ErrorProvider.SetError(EndOfDateText, "Ngày kết thúc đào tạo không được để trống");
                EndOfDateText.Focus();
                return;
            }
            else
                ErrorProvider.Dispose();

            DateTime startDate = DateTime.Parse(StartOfDateText.Text.Trim());
            DateTime endDate = DateTime.Parse(EndOfDateText.Text.Trim());
            if (startDate > endDate)
            {
                ErrorProvider.SetError(StartOfDateText, "Thời gian bắt đầu và kết thúc không hợp lệ");
                ErrorProvider.SetError(EndOfDateText, "Thời gian bắt đầu và kết thúc không hợp lệ");
                StartOfDateText.Focus();
                return;
            }
            else
                ErrorProvider.Dispose();

            if (FormsOfTrainingText.Text.Trim().Length == 0)
            {
                ErrorProvider.SetError(FormsOfTrainingText, "Hình thức đào tạo không được để trống");
                FormsOfTrainingText.Focus();
                return;
            }
            else
                ErrorProvider.Dispose();

            if (CertificatesDiplomasText.Text.Trim().Length == 0)
            {
                ErrorProvider.SetError(CertificatesDiplomasText, "Văn bằng, chứng chỉ của quá trình đào tạo không được để trống");
                CertificatesDiplomasText.Focus();
                return;
            }
            else
                ErrorProvider.Dispose();

            try
            {
                using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
                {
                    int empID = Int32.Parse(ComboEmployee.SelectedValue.ToString());
                    Employee emp = db.Employees.SingleOrDefault(p => p.EmpID == empID);

                    TrainingFostering trainFos = new TrainingFostering()
                    {
                        Employee = emp,
                        NameSchoolTrain = NameSchoolTrainText.Text.Trim(),
                        Specialized = SpecializedText.Text.Trim(),
                        StartOfDate = DateTime.Parse(StartOfDateText.Text.Trim()),
                        EndOfDate = DateTime.Parse(EndOfDateText.Text.Trim()),
                        FormsOfTraining = FormsOfTrainingText.Text.Trim(),
                        CertificatesDiplomas = CertificatesDiplomasText.Text.Trim(),
                        TrainStatus = CheckStatus.Checked
                    };

                    db.TrainingFosterings.Add(trainFos);
                    db.SaveChanges();

                    Controls_Reset();
                    ErrorProvider.Dispose();
                    GridEmpTrainning.DataSource = emp.TrainingFosterings.ToList();

                    EmployeeTranningFosterForm appear = new EmployeeTranningFosterForm();
                    AlertControl.Show(appear, "Hệ thống thông báo", "Thêm mới thông tin quá trình bồi dưỡng và đào tạo thành công");
                    //MessageBox.Show("Thêm mới quá trình bồi dưỡng và đào tạo thành công", "Hệ thống thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
            catch (Exception)
            {
                MessageBox.Show("Hệ thống đang bận, hãy thử lại sau.", "Hệ thống thông báo", MessageBoxButtons.OK, MessageBoxIcon.Stop);
            }
        }

        private void UpdateButton_Click(object sender, EventArgs e)
        {
            ErrorProvider.Dispose();

            if (ComboEmployee.SelectedIndex == 0)
            {
                ErrorProvider.SetError(ComboEmployee, "Hãy chọn nhân viên vừa thêm mới quá trình bồi dưỡng và đào tạo chuyên môn");
                ComboEmployee.Focus();
                return;
            }
            else
                ErrorProvider.Dispose();

            if (NameSchoolTrainText.Text.Trim().Length == 0)
            {
                ErrorProvider.SetError(NameSchoolTrainText, "Tên trường đào tạo và bồi dưỡng không được để trống");
                NameSchoolTrainText.Focus();
                return;
            }
            else
                ErrorProvider.Dispose();

            if (SpecializedText.Text.Trim().Length == 0)
            {
                ErrorProvider.SetError(SpecializedText, "Chuyên nghành đào tạo không được để trống");
                SpecializedText.Focus();
                return;
            }
            else
                ErrorProvider.Dispose();

            if (StartOfDateText.Text.Trim().Length == 0)
            {
                ErrorProvider.SetError(StartOfDateText, "Ngày bắt đầu đào tạo không được để trống");
                StartOfDateText.Focus();
                return;
            }
            else
                ErrorProvider.Dispose();


            if (EndOfDateText.Text.Trim().Length == 0)
            {
                ErrorProvider.SetError(EndOfDateText, "Ngày kết thúc đào tạo không được để trống");
                EndOfDateText.Focus();
                return;
            }
            else
                ErrorProvider.Dispose();
            DateTime startDate = DateTime.Parse(StartOfDateText.Text.Trim());
            DateTime endDate = DateTime.Parse(EndOfDateText.Text.Trim());
            if (startDate > endDate)
            {
                ErrorProvider.SetError(StartOfDateText, "Thời gian bắt đầu và kết thúc không hợp lệ");
                ErrorProvider.SetError(EndOfDateText, "Thời gian bắt đầu và kết thúc không hợp lệ");
                StartOfDateText.Focus();
                return;
            }
            else
                ErrorProvider.Dispose();

            if (FormsOfTrainingText.Text.Trim().Length == 0)
            {
                ErrorProvider.SetError(FormsOfTrainingText, "Hình thức đào tạo không được để trống");
                FormsOfTrainingText.Focus();
                return;
            }
            else
                ErrorProvider.Dispose();

            if (CertificatesDiplomasText.Text.Trim().Length == 0)
            {
                ErrorProvider.SetError(CertificatesDiplomasText, "Văn bằng, chứng chỉ của quá trình đào tạo không được để trống");
                CertificatesDiplomasText.Focus();
                return;
            }
            else
                ErrorProvider.Dispose();

            try
            {
                using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
                {
                    int empID = Int32.Parse(ComboEmployee.SelectedValue.ToString());
                    Employee emp = db.Employees.SingleOrDefault(p => p.EmpID == empID);

                    int empTrainID = 0;
                    List<int> listSelected = ViewEmpTraining.GetSelectedRows().ToList<int>();
                    int index = -1;
                    foreach (var item in listSelected)
                    {
                        if (item > -1)
                        {
                            index = item;
                            break;
                        }
                    }
                    empTrainID = Int32.Parse(ViewEmpTraining.GetRowCellValue(index, "TraFosID").ToString());
                    TrainingFostering train = db.TrainingFosterings.Single(t => t.TraFosID == empTrainID);

                    train.NameSchoolTrain = NameSchoolTrainText.Text.Trim();
                    train.Specialized = SpecializedText.Text.Trim();
                    train.StartOfDate = DateTime.Parse(StartOfDateText.Text.Trim());
                    train.EndOfDate = DateTime.Parse(EndOfDateText.Text.Trim());
                    train.FormsOfTraining = FormsOfTrainingText.Text.Trim();
                    train.CertificatesDiplomas = CertificatesDiplomasText.Text.Trim();
                    train.TrainStatus = CheckStatus.Checked;

                    if (MessageBox.Show("Bạn có muốn cập nhật quá trình bồi dưỡng và đào tạo", "Cập nhật", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                    {
                        db.SaveChanges();
                        Controls_Reset();
                        ErrorProvider.Dispose();
                        GridEmpTrainning.DataSource = emp.TrainingFosterings.ToList();

                        EmployeeTranningFosterForm appear = new EmployeeTranningFosterForm();
                        AlertControl.Show(appear, "Hệ thống thông báo", "Cập nhật thông tin quá trình bồi dưỡng và đào tạo thành công");
                        //MessageBox.Show("Cập nhật quá trình bồi dưỡng và đào tạo thành công", "Hệ thống thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                }
            }
            catch (Exception)
            {
                MessageBox.Show("Hệ thống đang bận, hãy thử lại sau.", "Hệ thống thông báo", MessageBoxButtons.OK, MessageBoxIcon.Stop);
            }
        }

        private void DeleteButton_Click(object sender, EventArgs e)
        {
            try
            {
                using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
                {
                    int empID = Int32.Parse(ComboEmployee.SelectedValue.ToString());
                    Employee emp = db.Employees.SingleOrDefault(p => p.EmpID == empID);

                    ErrorProvider.Dispose();
                    int empTrainID = 0;
                    List<int> listSelected = ViewEmpTraining.GetSelectedRows().ToList<int>();
                    int index = -1;
                    foreach (var item in listSelected)
                    {
                        if (item > -1)
                        {
                            index = item;
                            break;
                        }
                    }
                    empTrainID = Int32.Parse(ViewEmpTraining.GetRowCellValue(index, "TraFosID").ToString());
                    TrainingFostering train = db.TrainingFosterings.Single(t => t.TraFosID == empTrainID);


                    if (MessageBox.Show("Bạn có muốn xóa quá trình bồi dưỡng và đào tạo", "Xóa quá trình bồi dưỡng và đào tạo", MessageBoxButtons.YesNo, MessageBoxIcon.Stop) == DialogResult.Yes)
                    {
                        db.TrainingFosterings.Remove(train);
                        db.SaveChanges();
                        Controls_Reset();
                        ErrorProvider.Dispose();
                        GridEmpTrainning.DataSource = emp.TrainingFosterings.ToList();


                        EmployeeTranningFosterForm appear = new EmployeeTranningFosterForm();
                        AlertControl.Show(appear, "Hệ thống thông báo", "Xóa quá trình bồi dưỡng và đào tạo thành công");
                        //MessageBox.Show("Xóa quá trình bồi dưỡng và đào tạo thành công", "Hệ thống thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                }
            }
            catch (Exception)
            {
                MessageBox.Show("Hệ thống đang bận, hãy thử lại sau.", "Hệ thống thông báo", MessageBoxButtons.OK, MessageBoxIcon.Stop);
            }
        }

        private void CancelsButton_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("Bạn có muốn hủy bỏ và làm mới", "Hủy bỏ và làm mới", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes)
            {
                Controls_Reset();
                UseComboProvinces.SelectedIndex = 0;
            }
        }
    }
}